#ifndef MYSHELL_H
#define MYSHELL_H

#include <string>
#include <filesystem>
#include <mutex>
#include <map>
#include <unordered_map>
#include <vector>
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>

#include "MyShellGlobalVariables.h"
#include "MyShellAssistFunctions.h"
#include "Executor.h"
#include "InternalCommands.h"
#include "MyShellNamespace.h"
#include "ResourceManager.h"
#include "JParserNamespace.h"
#include "JNode.h"
#include "JParser.h"

MY_SHELL_NAMESPACE_BEGIN
class MyShell
{
private:
    // 将MyShell设计为单例模式所需要的私有成员变量
    static MyShell* instance;
    static std::mutex mtx;
private:
    // 私有的构造、析构方法
    MyShell();
    ~MyShell();
public:
    // 公有创造、销毁方法
    static mysh::MyShell* getInstance();
    static void destroyInstance();
private:
    // 私有辅助函数
    // 配置函数
    void configurate();
public:
    // 主循环
    void mainLoop();
public:
    // 获取退出状态
    std::uint32_t getExitStatus();
};
MY_SHELL_NAMESPACE_END

#endif // ! MYSHELL_H